﻿vector saberColor;
vector saberColor2;
list tgts = [];
list tgts2 = [];
integer saberOn = 0;
init()
{
    llListen(69, "", "", "");
    llListen(169, "", "", "");
}
throw()
{
    llDialog(llGetOwner(), "Select Target", tgts2, 169);
}
disappear()
{
    llSetTimerEvent(4.0);
    llSetLinkAlpha(ALL_SIDES, 0, ALL_SIDES);
}
appear()
{
    llSetLinkAlpha(ALL_SIDES, 1, ALL_SIDES);
    llMessageLinked(LINK_SET,0,"OFF",NULL_KEY);                
    llMessageLinked(LINK_SET,0,"2OFF",NULL_KEY);                
    llMessageLinked(LINK_SET,0,"HIDE CAL",NULL_KEY);
    llMessageLinked(LINK_SET,0,"HIDE BLUR",NULL_KEY);            
    llMessageLinked(LINK_SET,0,"2HIDE BLUR",NULL_KEY);            
    llMessageLinked(LINK_SET,0,"ON",NULL_KEY);
    if(saberOn == 2)
    {
        llMessageLinked(LINK_SET,0,"2ON",NULL_KEY);    
    }
    llSetTimerEvent(0);
}
default
{
    state_entry()
    {
        init();
    }
    on_rez(integer start_param)
    {
        init();
    }
    attach(key attached)
    {
        init();
    }
    sensor(integer num)
    {
        integer i;
        integer j;
        if(num > 12)
        {
            j = 12;
        }
        else
        {
            j = num;
        }
        for(i = 0; i < j; i++)
        {
            tgts += llDetectedName(i);
            if(llStringLength(llDetectedName(i)) > 20)
            {
                tgts2 += llGetSubString(llDetectedName(i), 0, 19);
            }
            else
            {
                tgts2 += llDetectedName(i);
            }
        }
        throw();
    }
    timer()
    {
        appear();
    }
    listen(integer chan, string name, key id, string msg)
    {
        integer listnum;
        vector pos;
        if(llGetOwnerKey(id) == llGetOwner())
        {
            if(llToLower(msg) == "throw" && saberOn > 0)
            {
                tgts = [];
                tgts2 = [];
                llSensor("", "", AGENT, 96, TWO_PI);
            }
            else if(llToLower(msg) == "on" || llToLower(msg) == "both on")
            {
                if(llToLower(msg) == "on")
                {
                    saberOn = 1;
                }
                else
                {
                    saberOn = 2;
                }
            }
            else if(llToLower(msg) == "off")
            {
                saberOn = FALSE;
            }
            else if(chan == 169)
            {
                listnum = llListFindList(tgts2, [msg]);
                if(listnum != -1)
                {
                    pos = llGetPos();
                    pos.y += 1;
                    llRezObject("throw bullet", pos, ZERO_VECTOR, ZERO_ROTATION, saberOn);
                    llSleep(0.1);
                    llShout(-171, (string)saberColor2);
                    llShout(-170, (string)saberColor);
                    llSleep(0.1);
                    llShout(-169, llList2String(tgts, listnum));
                    disappear();
                }
            }
        }
    }

    link_message(integer sender_num, integer num, string msg, key id)
    {
        if(llGetSubString(msg,0,4) == "COLOR")
        {
            saberColor = (vector)llGetSubString(msg,6,-1);
        }
        else if(llGetSubString(msg,0,5) == "2COLOR")
        {
            saberColor2 = (vector)llGetSubString(msg,7,-1);
        }
    }
}
